class State{
   int m;  // numarul de misionari pe malul stang;
   int c;  // numarul de canibali pe malul stang;
   int b;  // 0 pentru barca pe malul stang, 1 pentru barca pe malul drept;
 
   State()
   { // construirea starii de inceput (3,3,L)
     m = 3;
     c = 3;
     b = 0;
   }
   State(State s)
   { m = s.m;
     c = s.c;
     b = s.b;
   }
   boolean legal()
   /* testarea legalitatii mutarilor */
   { if(m < 0 || m > 3 || c<0 || c > 3) return false;
     if(3-m < 0 || 3-m > 3  || 3-c <0 || 3-c > 3) return false;
     if(m > 0 && c > m) return false;
     if(3-m >0 && 3-c > 3-m) return false;
     return true;
   }
 
   
   State move(int Mis, int Can) 
   { State ans = new State(this);
     if(b == 0)
        { ans.m = m - Mis;
          ans.c = c - Can;
          ans.b = 1;
        }
     else
        { ans.m = m + Mis;
          ans.c = c + Can;
          ans.b = 0;
        }
     return ans;
   }
 
   void display()
   { System.out.println(m + " misionari " + c + " canibali " + (b == 0 ? 'L' : 'R'));
   }
 }
 
 